diff --git a/system/helpers/download_helper.php b/system/helpers/download_helper.php
index dbedd87..34cc152 100644
--- a/system/helpers/download_helper.php
+++ b/system/helpers/download_helper.php
@@ -1,96 +1,96 @@
-<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');
-/**
- * Code Igniter
- *
- * An open source application development framework for PHP 4.3.2 or newer
- *
- * @package		CodeIgniter
- * @author		Rick Ellis
- * @copyright	Copyright (c) 2006, pMachine, Inc.
- * @license		http://www.codeignitor.com/user_guide/license.html
- * @link		http://www.codeigniter.com
- * @since		Version 1.0
- * @filesource
- */
-
-// ------------------------------------------------------------------------
-
-/**
- * Code Igniter Download Helpers
- *
- * @package		CodeIgniter
- * @subpackage	Helpers
- * @category	Helpers
- * @author		Rick Ellis
- * @link		http://www.codeigniter.com/user_guide/helpers/download_helper.html
- */
-
-// ------------------------------------------------------------------------
-
-/**
- * Force Download
- *
- * Generates headers that force a download to happen
- *
- * @access	public
- * @param	string	filename
- * @param	mixed	the data to be downloaded
- * @return	void
- */	
-function force_download($filename = '', $data = '')
-{
-	if ($filename == '' OR $data == '')
-	{
-		return FALSE;
-	}
-
-	// Try to determine if the filename includes a file extension.
-	// We need it in order to set the MIME type
-	if (FALSE === strpos($filename, '.'))
-	{
-		return FALSE;
-	}
-	
-	// Grab the file extension
-	$x = explode('.', $filename);
-	$extension = end($x);
-
-	// Load the mime types
-	@include(APPPATH.'config/mimes'.EXT);
-	
-	// Set a default mime if we can't find it
-	if ( ! isset($mimes[$extension]))
-	{
-		$mime = 'application/octet-stream';
-	}
-	else
-	{
-		$mime = (is_array($mimes[$extension])) ? $mimes[$extension][0] : $mimes[$extension];
-	}
-	
-	// Generate the server headers
-	if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
-	{
-		header('Content-Type: "'.$mime.'"');
-		header('Content-Disposition: inline; filename="'.$filename.'"');
-		header('Expires: 0');
-		header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
-		header("Content-Transfer-Encoding: binary");
-		header('Pragma: public');
-		header("Content-Length: ".strlen($data));
-	}
-	else
-	{
-		header('Content-Type: "'.$mime.'"');
-		header('Content-Disposition: attachment; filename="'.$filename.'"');
-		header("Content-Transfer-Encoding: binary");
-		header('Expires: 0');
-		header('Pragma: no-cache');
-		header("Content-Length: ".strlen($data));
-	}
-	
-	echo $data;
-}
-
-
+<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');
+/**
+ * Code Igniter
+ *
+ * An open source application development framework for PHP 4.3.2 or newer
+ *
+ * @package		CodeIgniter
+ * @author		Rick Ellis
+ * @copyright	Copyright (c) 2006, pMachine, Inc.
+ * @license		http://www.codeignitor.com/user_guide/license.html
+ * @link		http://www.codeigniter.com
+ * @since		Version 1.0
+ * @filesource
+ */
+
+// ------------------------------------------------------------------------
+
+/**
+ * Code Igniter Download Helpers
+ *
+ * @package		CodeIgniter
+ * @subpackage	Helpers
+ * @category	Helpers
+ * @author		Rick Ellis
+ * @link		http://www.codeigniter.com/user_guide/helpers/download_helper.html
+ */
+
+// ------------------------------------------------------------------------
+
+/**
+ * Force Download
+ *
+ * Generates headers that force a download to happen
+ *
+ * @access	public
+ * @param	string	filename
+ * @param	mixed	the data to be downloaded
+ * @return	void
+ */	
+function force_download($filename = '', $data = '')
+{
+	if ($filename == '' OR $data == '')
+	{
+		return FALSE;
+	}
+
+	// Try to determine if the filename includes a file extension.
+	// We need it in order to set the MIME type
+	if (FALSE === strpos($filename, '.'))
+	{
+		return FALSE;
+	}
+	
+	// Grab the file extension
+	$x = explode('.', $filename);
+	$extension = end($x);
+
+	// Load the mime types
+	@include(APPPATH.'config/mimes'.EXT);
+	
+	// Set a default mime if we can't find it
+	if ( ! isset($mimes[$extension]))
+	{
+		$mime = 'application/octet-stream';
+	}
+	else
+	{
+		$mime = (is_array($mimes[$extension])) ? $mimes[$extension][0] : $mimes[$extension];
+	}
+	
+	// Generate the server headers
+	if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
+	{
+		header('Content-Type: "'.$mime.'"');
+		header('Content-Disposition: attachment; filename="'.$filename.'"');
+		header('Expires: 0');
+		header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
+		header("Content-Transfer-Encoding: binary");
+		header('Pragma: public');
+		header("Content-Length: ".strlen($data));
+	}
+	else
+	{
+		header('Content-Type: "'.$mime.'"');
+		header('Content-Disposition: attachment; filename="'.$filename.'"');
+		header("Content-Transfer-Encoding: binary");
+		header('Expires: 0');
+		header('Pragma: no-cache');
+		header("Content-Length: ".strlen($data));
+	}
+	
+	echo $data;
+}
+
+
 ?>
\ No newline at end of file
